/**
 * 1.快乐数
 * 编写一个算法来判断一个数 n 是不是快乐数。
 * 「快乐数」定义为：
 *      - 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
 *      - 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
 *      - 如果 可以变为  1，那么这个数就是快乐数。
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {
    function dp(n, set) {
        if (n === 1) {
            return true;
        }
        if (set.has(n)) {
            return false;
        }
        set.add(n);
        let sum = 0;
        while (n > 0) {
            sum += (n % 10) ** 2;
            n = parseInt(n / 10);
        }
        return dp(sum, set);
    }
    return dp(n, new Set());
};
// console.log(isHappy(19)); // true
// console.log(isHappy(456321)); // false
/**
 * 2.阶乘后的零
 * 给定一个整数 n，返回 n! 结果尾数中零的数量。
 * @param {number} n
 * @return {number}
 */
var trailingZeroes = function(n) {
    let rst = 1;
    while (n > 1) {
        rst *= n--;
    }
    console.log(rst);
    let c = 0;
    while (rst > 0 && rst % 10 === 0) {
        ++c;
        rst = parseInt(rst / 10)
    }
    return c;
};
console.log(trailingZeroes(30));
